# 一、正则re

# 1. 正则是什么

#    - 字符串匹配
#    - 从一堆字符串中查找符合条件的字符串
#    - 正则表达式：特殊的字符序列，检查一个字符串是否与某种模式匹配
#    - re 模块：拥有全部的正则表达式功能

# 2. 正则表达式使用

#    - 常用的正则模式串编写  (pattern)
#    - 使用模式串进行匹配
#    - re.match(pattern, string, flags=0)
#      - pattern: 模式串
#      - string: 需要被查找的字符串
#      - flags: 正则表达式的匹配方式 （如：是否区分大小写，多行匹配等等）
#      - 如果匹配成功则返回匹配对象，否则返回None
#    - re.findall(pattern, string, flags=0)
#      - 在string中查找所有子串，返回一个列表；没有找到匹配，返回空列表
#      - match只查找一次，findall匹配所有

# 3. 神一样的(.*?)

#    - .* 表示任意匹配除换行符（\n、\r）之外的任何单个或多个字符
#    - (.*?) 表示"非贪婪"模式，只保存第一个匹配到的子串

# 4. 可选标志（flags）

#    可选标志修饰符用于控制匹配的模式。多个标志可以通过按位 OR(|) 它们来指定。（如 re.I | re.M 被设置成 I 和 M 标志）

#    | 修饰符 | 描述
#    | :----: | :----------------------------------------------------
#    |  re.I  | 使匹配对大小写不敏感
#    |  re.L  | 做本地化识别（locale-aware）匹配
#    |  re.M  | 多行匹配，影响 ^ 和 $
#    |  re.S  | 使 . 匹配包括换行在内的所有字符
#    |  re.U  | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
#    |  re.X  | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

# 5. 常用正则模式符

# 6. 案例: 字符串
s = '''abcd-摩托车.blend\n-----1234-大象.blend\n----efg-卡车.blend\n----5678-蘑菇.blend\n---'''
import re
#    - 只提取前面有数字的  blender文件信息

pattern = r"[0-9]+.+\.blend"
pattern = r"-([0-9]+.*?)\n"

res = re.findall(pattern=pattern, string=s)
print(res)
